#include "exti_handler.h"
#include "beep.hpp"
#include "TIMER.hpp"
#include <stm32f10x_dma.h>
__IO uint32_t u32SystemTick100us;
int set_test_adc_timer;
char led_status[4] = {0};
extern "C"
{
    void SysTick_Handler(void)
    {
        u32SystemTick100us++;
    }

    void EXTI2_IRQHandler(void)
    {
        if (EXTI_GetFlagStatus(EXTI_Line2) == SET)
        {
            /*
                写你的中断处理
            */

            EXTI_wakeup();

            //需要手动清除中断标志位
            EXTI_ClearITPendingBit(EXTI_Line2);
        }
    }
    void EXTI9_5_IRQHandler(void)
    {
        if (EXTI_GetFlagStatus(EXTI_Line6) == SET)
        {
            /*
                写你的中断处理
            */
            led_status[1] = !led_status[1];
            GPIO_WriteBit(GPIOB, GPIO_Pin_6, (BitAction)led_status[1]);
            //需要手动清除中断标志位
            EXTI_ClearITPendingBit(EXTI_Line6);
        }
        if (EXTI_GetFlagStatus(EXTI_Line7) == SET)
        {
            /*
                写你的中断处理
            */
            led_status[2] = !led_status[2];
            GPIO_WriteBit(GPIOB, GPIO_Pin_5, (BitAction)led_status[2]);
            //需要手动清除中断标志位
            EXTI_ClearITPendingBit(EXTI_Line7);
        }
    }
    void EXTI15_10_IRQHandler(void)
    {
        if (EXTI_GetFlagStatus(EXTI_Line13) == SET)
        {
            /*
                写你的中断处理
            */
            led_status[3] = !led_status[3];
            GPIO_WriteBit(GPIOB, GPIO_Pin_4, (BitAction)led_status[3]);
            //需要手动清除中断标志位
            EXTI_ClearITPendingBit(EXTI_Line13);
        }
    }

    void TIM2_IRQHandler(void)
    {
        if (TIM_GetITStatus(TIM2, TIM_IT_Update))
        {
            //填写中断中要完成的任务
            //   timer_interrupt_callback();
            // u32SystemTick100us++;
        }
        TIM_ClearITPendingBit(TIM2, TIM_IT_Update);
    }
    void ADC1_2_IRQHandler(void)
    {
        if (ADC_GetITStatus(ADC1, ADC_IT_EOC))
        {
            if (set_test_adc_timer++ > 100000000)
            {
                set_test_adc_timer = 0;
            }
        }
        ADC_ClearITPendingBit(ADC1, ADC_IT_EOC);
    }
    void DMA1_Channel1_IRQHandler(void)
    {
        if (DMA_GetITStatus(DMA1_IT_TC1) != RESET)
        {
            // filter(); // ADC滤波函数
            DMA_ClearITPendingBit(DMA1_IT_TC1);
        }
    }
}